﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlServerCe;
using Dados.ConexaoCE;
using EFITransmissao.Entidade;
using System.Collections;
using System.Data;

namespace EFITransmissao.Dados.DAO
{
    public class DAOSDCard
    {
        public DAOSDCard() { }

        private static string _strConexao = @"Persist Security Info = false; 
                                   Data Source = .\Storage Card\Leituras.sdf";

        public static bool ExistDB_SDCard()
        {
            bool retorno = false;
            try
            {
                if (System.IO.File.Exists(@".\Storage Card\Leituras.sdf") == true)
                    retorno = true;
                else
                    retorno = false;

                //CEMSDataAccess db = new CEMSDataAccess(_strConexao);
                //DataTable dt = db.ExecutaConsulta("ObterTodosLeituras", null);

                //if (dt.Rows.Count > 0)
                //    retorno = true;
                //else
                //    retorno = false;

            }
            catch (Exception)
            {
                retorno = false;
            }

            return retorno;
        }

        public static void CompactarDB_SDCard()
        {
            try
            {
                SqlCeEngine engine = new SqlCeEngine(@"Persist Security Info = false; 
                                   Data Source = .\Storage Card\Leituras.sdf");
                //Reparar:
                if (false == engine.Verify())
                {
                    engine.Repair(null, RepairOption.RecoverCorruptedRows);
                }
                //Compactar:
                engine.Shrink();

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return;
        }

        /// <summary>
        /// Deleta os registros da tabela "Leituras" do Db SDCard:
        /// </summary>
        public static void DeleteLeituras_SDCard()
        {
            try
            {
                CEMSDataAccess db = new CEMSDataAccess(_strConexao);
                db.ExecutaAtualizacao("DeleteLeituras_SDCard", null);
            }
            catch (Exception)
            {
                throw;
            }

            return;
        }
        
        /// <summary>
        /// Insere dados do Banco Principal no Backup - SDCard:
        /// </summary>
        /// <param name="obj"></param>
        public static void InsereDadosLeituras_SDCard(List<Leituras> obj)
        {
            try
            {
                CEMSDataAccess db = new CEMSDataAccess(_strConexao);

                foreach (var item in obj)
                {
                    Hashtable prm = new Hashtable();
                    prm["@acertosLeit"] = item.AcertosLeit;
                    prm["@classe"] = item.Classe;
                    prm["@complemento"] = item.Complemento;
                    prm["@constante"] = item.Constante;
                    prm["@dataLeitura"] = item.DataLeitura;
                    prm["@dtHrSat"] = item.DtHrSat;
                    prm["@endereco"] = item.Endereco;
                    prm["@fabricante"] = item.Fabricante;
                    prm["@fase"] = item.Fase;
                    prm["@fixo1"] = item.Fixo1;
                    prm["@fixo2"] = item.Fixo2;
                    prm["@fixo3"] = item.Fixo3;
                    prm["@fixo4"] = item.Fixo4;
                    prm["@fixo5"] = item.Fixo5;
                    prm["@fixo6"] = item.Fixo6;                    
                    prm["@horaLeitura"] = item.HoraLeitura;
                    prm["@idFoto"] = item.IdFoto;
                    prm["@idLeit"] = item.IdLeit;
                    prm["@idMotivoDeslig"] = item.IdMotivoDeslig;
                    prm["@idParte"] = item.IdParte;
                    prm["@idRegiao"] = item.IdRegiao;
                    prm["@idRota"] = item.IdRota;
                    prm["@latDegress"] = item.LatDegress;
                    prm["@latitude"] = item.Latitude;
                    prm["@leitMax"] = item.LeitMax;
                    prm["@leitMin"] = item.LeitMin;
                    prm["@leituraAnterior"] = item.LeituraAnterior;
                    prm["@leituraAtual"] = item.LeituraAtual;
                    prm["@ligado"] = item.Ligado;
                    prm["@lngDegress"] = item.LngDegress;
                    prm["@longitude"] = item.Longitude;
                    prm["@marca"] = item.Marca;
                    prm["@medidor"] = item.Medidor;
                    prm["@medidorAlt"] = item.MedidorAlt;
                    prm["@medidorRetirado"] = item.MedidorRetirado;
                    prm["@modelo"] = item.Modelo;
                    prm["@nome"] = item.Nome;
                    prm["@ocorrencia1"] = item.Ocorrencia1;
                    prm["@ocorrencia2"] = item.Ocorrencia2;
                    prm["@ocorrencia3"] = item.Ocorrencia3;
                    prm["@ocorrencia4"] = item.Ocorrencia4;
                    prm["@ocorrenciaAnt"] = item.OcorrenciaAnt;
                    prm["@seqLeitura"] = item.SeqLeitura;
                    prm["@uc"] = item.Uc;
                    prm["@utm_x"] = item.Utm_x;
                    prm["@utm_y"] = item.Utm_y;

                    db.ExecutaAtualizacao("InsereDadosLeituras_SDCard", prm);
                }                
            }
            catch (Exception)
            {
                throw;
            }
            return;
        }

        /// <summary>
        /// Atualiza as informações coletadas para o Backup - SDCard:
        /// </summary>
        /// <param name="obj"></param>
        public static void AtualizaDadosLeituras_SDCard(Leituras obj)
        {
            try
            {
                Hashtable prm = new Hashtable();
                prm["@uc"] = obj.Uc;
                prm["@utm_x"] = obj.Utm_x;
                prm["@utm_y"] = obj.Utm_y;
                prm["@latDegress"] = obj.LatDegress;
                prm["@lngDegress"] = obj.LngDegress;
                prm["@latitude"] = obj.Latitude;
                prm["@longitude"] = obj.Longitude;
                prm["@acertosLeit"] = obj.AcertosLeit;
                prm["@dataLeitura"] = obj.DataLeitura;
                prm["@horaLeitura"] = obj.HoraLeitura;
                prm["@ocorrencia1"] = obj.Ocorrencia1;
                prm["@ocorrencia2"] = obj.Ocorrencia2;
                prm["@ocorrencia3"] = obj.Ocorrencia3;
                prm["@ocorrencia4"] = obj.Ocorrencia4;
                prm["@leituraAtual"] = obj.LeituraAtual;
                prm["@dtHrSat"] = obj.DtHrSat;
                prm["@idFoto"] = obj.IdFoto;
                
                CEMSDataAccess db = new CEMSDataAccess(_strConexao);
                db.ExecutaAtualizacao("AtualizaDadosLeituras_SDCard", prm);

            }
            catch (Exception)
            {
                throw;
            }
            return;
        }

        /// <summary>
        /// Atualiza no Banco de dados de Backup - SDCard as fotos registradas:
        /// </summary>
        /// <param name="foto"></param>
        /// <param name="uc"></param>
        public static void AtualizaFotos_SDCard(byte[] foto, string idFoto)
        {
            try
            {
                Hashtable prm = new Hashtable();
                prm["@idFoto"] = idFoto;
                prm["@foto"] = foto;              

                CEMSDataAccess db = new CEMSDataAccess(_strConexao);
                db.ExecutaAtualizacao("AtualizaFoto", prm);

            }
            catch (Exception)
            {
                throw;
            }
            return;
        }
    }
}
